package disjunction.core
{
	import disjunction.core.geom.Vector2;
	
	import flash.geom.Rectangle;
	
	/**
	 * A ICamera implementation interprets the position, scale and rotation of
	 * view elements in world space, into screen space; performs depth ordering;
	 * and performs view culling using transform information.
	 *
	 * @author Nick Wiggill
	 */
	
	public interface ICamera
	{
		/** 
		 * Transforms all entities into their correct screen space positions, and returns a list
		 * of only those that are within the view frustum after transformation.
		 * Note that we pass the models and views lists in on every call, to ensure that camera
		 * functionality is not broken if the underlying lists are recreated/reassigned.
		 */
		function update(entityViews:Array):void;
		
		//NOTE these will be defined in the strategies supporting them.
		//NOTE each one should modify the list directly rather than returning a modified version.
		//function transform(entityViews:Array, position:Vector2, rotation:Number):void;
		//function sort(entityViews:Array, position:Vector2):void;
		//function cull(entityViews:Array, position:Vector2, rotation:Number, bounds:Rectangle):void;
	}
}